﻿// -----------------------------------------------------------------------
// <copyright file="QuanHuyenData.cs" company="VDC-IT" author="LTDUC">
//      Copyright (c) VDC-IT. All rights reserved.
// </copyright>
// -----------------------------------------------------------------------

namespace VDC.VONE.DAL
{
    using System;
    using System.Collections.Generic;
    using System.Data.SqlClient;
    using System.Reflection;
    using Microsoft.ApplicationBlocks.Data;
    using VDC.COMMON;
    using VDC.VONE.ENTITY;
    
    /// <summary>
    ///     Lớp truy giao tiếp với cơ sở dữ liệu quận, huyện
    /// </summary>
    public class QuanHuyenData
    {
        /// <summary>
        /// Lấy thông tin quận, huyện bởi id
        /// </summary>
        /// <param name="id">Id quận, huyện</param>
        /// <returns>Trả về thông tin quận, huyện</returns>
        public QuanHuyen GetQuanHuyenById(int id)
        {
            string methodName = MethodBase.GetCurrentMethod().DeclaringType.ToString();
            LogHelper.Instance.WriteInfo(Constants.Begin + methodName);
            try
            {
                QuanHuyen quanHuyen = null;
                var reader = SqlHelper.ExecuteReader(SqlHelper.ConnectionString, Constants.StorepProcedure.VOneQuanHuyenGetById, id.ToString());
                while (reader.Read())
                {
                    quanHuyen = new QuanHuyen();
                    if (!reader.IsDBNull(0))
                    {
                        quanHuyen.IdQuanHuyen = reader.GetInt32(0);
                    }

                    if (!reader.IsDBNull(1))
                    {
                        quanHuyen.IdTinhThanh = reader.GetInt32(1);
                    }

                    if (!reader.IsDBNull(2))
                    {
                        quanHuyen.MaQuanHuyen = reader.GetString(2);
                    }

                    if (!reader.IsDBNull(3))
                    {
                        quanHuyen.TenQuanHuyen = reader.GetString(3);
                    }
                }

                reader.Close();
                reader.Dispose();
                LogHelper.Instance.WriteInfo(Constants.End + methodName);
                return quanHuyen;
            }
            catch (SqlException ex)
            {
                LogHelper.Instance.WriteError(methodName + Constants.Colon + ex.Message);
                throw;
            }
        }

        /// <summary>
        /// Lấy thông tin tất cả quận, huyện
        /// </summary>
        /// <returns>Lấy tất cả thông tin quận, huyện</returns>
        public IList<QuanHuyen> GetQuanHuyen()
        {
            string methodName = MethodBase.GetCurrentMethod().DeclaringType.ToString();
            LogHelper.Instance.WriteInfo(Constants.Begin + methodName);
            try
            {
                IList<QuanHuyen> listQuanHuyen = new List<QuanHuyen>();
                SqlDataReader reader = SqlHelper.ExecuteReader(SqlHelper.ConnectionString, Constants.StorepProcedure.VOneQuanHuyenGet);
                while (reader.Read())
                {
                    QuanHuyen quanHuyen = new QuanHuyen();

                    if (!reader.IsDBNull(0))
                    {
                        quanHuyen.IdQuanHuyen = reader.GetInt32(0);
                    }

                    if (!reader.IsDBNull(1))
                    {
                        quanHuyen.IdTinhThanh = reader.GetInt32(1);
                    }

                    if (!reader.IsDBNull(2))
                    {
                        quanHuyen.MaQuanHuyen = reader.GetString(2);
                    }

                    if (!reader.IsDBNull(3))
                    {
                        quanHuyen.TenQuanHuyen = reader.GetString(3);
                    }

                    listQuanHuyen.Add(quanHuyen);
                }

                reader.Close();
                reader.Dispose();
                LogHelper.Instance.WriteInfo(Constants.End + methodName);
                return listQuanHuyen;
            }
            catch (SqlException ex)
            {
                LogHelper.Instance.WriteError(methodName + Constants.Colon + ex.Message);
                throw;
            }
        }

        /// <summary>
        /// Tìm kiếm theo quận, huyện
        /// </summary>
        /// <param name="quanHuyen">Tham số quận, huyện</param>
        /// <returns>Tra ve danh sách quận, huyện</returns>
        public IList<QuanHuyen> SearchBy(QuanHuyen quanHuyen)
        {
            string methodName = MethodBase.GetCurrentMethod().DeclaringType.ToString();
            LogHelper.Instance.WriteInfo(Constants.Begin + methodName);
            try
            {
                //if (string.IsNullOrEmpty(quanHuyen.MaQuanHuyen))
                //{
                //    quanHuyen.MaQuanHuyen = "*";
                //}

                //if (string.IsNullOrEmpty(quanHuyen.TenQuanHuyen))
                //{
                //    quanHuyen.TenQuanHuyen = "*";
                //}

                //string[] sqlParameters = new[]
                //{
                //    "{0}={1}", Constants.SqlParamerterName.IdQuanHuyen, quanHuyen.IdQuanHuyen),
                //    "{0}={1}", Constants.SqlParamerterName.IdTinhThanh, quanHuyen.IdTinhThanh),
                //    "{0}='{1}'", Constants.SqlParamerterName.MaQuanHuyen, quanHuyen.MaQuanHuyen),
                //    "{0}='{1}'", Constants.SqlParamerterName.TenQuanHuyen, quanHuyen.TenQuanHuyen)
                //};
               
                IList<QuanHuyen> listQuanHuyen = new List<QuanHuyen>();
                //SqlDataReader reader = SqlHelper.ExecuteReader(SqlHelper.ConnectionString, Constants.StorepProcedure.VOneQuanHuyenGetName, sqlParameters);
                //while (reader.Read())
                //{
                //    quanHuyen = new QuanHuyen();

                //    if (!reader.IsDBNull(0))
                //    {
                //        quanHuyen.IdQuanHuyen = reader.GetInt32(0);
                //    }

                //    if (!reader.IsDBNull(1))
                //    {
                //        quanHuyen.IdTinhThanh = reader.GetInt32(1);
                //    }

                //    if (!reader.IsDBNull(2))
                //    {
                //        quanHuyen.MaQuanHuyen = reader.GetString(2);
                //    }

                //    if (!reader.IsDBNull(3))
                //    {
                //        quanHuyen.TenQuanHuyen = reader.GetString(3);
                //    }

                //    listQuanHuyen.Add(quanHuyen);
                //}

                //reader.Close();
                //reader.Dispose();
                LogHelper.Instance.WriteInfo(Constants.End + methodName);
                return listQuanHuyen;
            }
            catch (SqlException ex)
            {
                LogHelper.Instance.WriteError(methodName + Constants.Colon + ex.Message);
                throw;
            }
        }

        /// <summary>
        /// Chèn dữ liệu vào quận, huyện
        /// </summary>
        /// <param name="quanHuyen">Tham số quận, huyện</param>
        /// <returns>Chèn quận, huyện</returns>
        public int Insert(QuanHuyen quanHuyen)
        {
            string methodName = MethodBase.GetCurrentMethod().DeclaringType.ToString();
            LogHelper.Instance.WriteInfo(Constants.Begin + methodName);
            try
            {
                var sqlParameters = new[]
                                {
                                    new SqlParameter(Constants.SqlParamerterName.IdTinhThanh, quanHuyen.IdTinhThanh),
                                    new SqlParameter(Constants.SqlParamerterName.MaQuanHuyen, quanHuyen.MaQuanHuyen),
                                    new SqlParameter(Constants.SqlParamerterName.TenQuanHuyen, quanHuyen.TenQuanHuyen),
                                };

                var result = System.Convert.ToInt32(SqlHelper.ExecuteScalar(SqlHelper.ConnectionString, Constants.StorepProcedure.VOneQuanHuyenSetName, sqlParameters));
                LogHelper.Instance.WriteInfo(Constants.End + methodName);
                return result;
            }
            catch (SqlException ex)
            {
                LogHelper.Instance.WriteError(methodName + Constants.Colon + ex.Message);
                throw;
            }
        }

        /// <summary>
        /// Cập nhật dữ liệu vào quận, huyện
        /// </summary>
        /// <param name="quanHuyen">Tham số quận, huyện</param>
        public void Update(QuanHuyen quanHuyen)
        {
            string methodName = MethodBase.GetCurrentMethod().DeclaringType.ToString();
            LogHelper.Instance.WriteInfo(Constants.Begin + methodName);
            try
            {
                var sqlParameters = new[]
                                {
                                    new SqlParameter(Constants.SqlParamerterName.IdQuanHuyen, quanHuyen.IdQuanHuyen),
                                    new SqlParameter(Constants.SqlParamerterName.MaQuanHuyen, quanHuyen.MaQuanHuyen),
                                    new SqlParameter(Constants.SqlParamerterName.TenQuanHuyen, quanHuyen.TenQuanHuyen),
                                    new SqlParameter(Constants.SqlParamerterName.IdTinhThanh, quanHuyen.IdTinhThanh)
                                };

                SqlHelper.ExecuteNonQuery(SqlHelper.ConnectionString, Constants.StorepProcedure.VOneQuanHuyenSetName, sqlParameters);
                LogHelper.Instance.WriteInfo(Constants.End + methodName);
            }
            catch (SqlException ex)
            {
                LogHelper.Instance.WriteError(methodName + Constants.Colon + ex.Message);
                throw;
            }
        }

        /// <summary>
        /// Xóa dữ liệu quận, huyện bởi id
        /// </summary>
        /// <param name="idQuanHuyen">id quận, huyện</param>
        public void Delete(int idQuanHuyen)
        {
            string methodName = MethodBase.GetCurrentMethod().DeclaringType.ToString();
            LogHelper.Instance.WriteInfo(Constants.Begin + methodName);
            try
            {
                var sqlParameters = new[] 
                { 
                    new SqlParameter(Constants.SqlParamerterName.IdQuanHuyen, idQuanHuyen)
                };

                SqlHelper.ExecuteNonQuery(SqlHelper.ConnectionString, Constants.StorepProcedure.VOneQuanHuyenDeleteName, sqlParameters);
                LogHelper.Instance.WriteInfo(Constants.End + methodName);
            }
            catch (SqlException ex)
            {
                LogHelper.Instance.WriteError(methodName + Constants.Colon + ex.Message);
                throw;
            }
        }

        /// <summary>
        /// Kiểm tra việc xóa trên bảng Phường, Xã
        /// </summary>
        /// <param name="idQuanHuyen">Tham số Id quận, huyện</param>
        /// <returns>Trả về thông tin có xóa được hay không?</returns>
        public bool CheckDeleteOnPhuongXa(int idQuanHuyen)
        {
            string methodName = MethodBase.GetCurrentMethod().DeclaringType.ToString();
            LogHelper.Instance.WriteInfo(Constants.Begin + methodName);
            try
            {
                SqlDataReader reader = SqlHelper.ExecuteReader(SqlHelper.ConnectionString, Constants.StorepProcedure.VOneCheckDeleteOnPhuongXaName, idQuanHuyen);
                return reader.Read();
            }
            catch (SqlException ex)
            {
                LogHelper.Instance.WriteError(methodName + Constants.Colon + ex.Message);
                throw;
            }
        }

        /// <summary>
        /// Kiểm tra việc trùng trên mã quận, huyện
        /// </summary>
        /// <param name="codeQuanHuyen">Tham số mã quận, huyện</param>
        /// <returns>Trả về thông tin có trùng được hay không?</returns>
        public int CheckOnMaQuanHuyen(string codeQuanHuyen)
        {
            string methodName = MethodBase.GetCurrentMethod().DeclaringType.ToString();
            LogHelper.Instance.WriteInfo(Constants.Begin + methodName);
            try
            {
                var sqlParameters = new[]
                                {
                                    new SqlParameter(Constants.SqlParamerterName.MaQuanHuyen, codeQuanHuyen)
                                };

                var result = Convert.ToInt32(SqlHelper.ExecuteScalar(Constants.StorepProcedure.VOneCheckOnMaQuanHuyenName, null, null, sqlParameters));
                LogHelper.Instance.WriteInfo(Constants.End + methodName);
                return result;
            }
            catch (SqlException ex)
            {
                LogHelper.Instance.WriteError(methodName + Constants.Colon + ex.Message);
                throw;
            }
        }
    }
}